package main

import (
	"bufio"
	"fmt"
	"os"
)
/**
1、defer定义的一定会执行，即使出现了return和panic 语句
2、defer定义的语句会后执行，比正常语句后执行
3、defer语句可以定义多个，后定义的先执行
4、应用场景：
 	使用 defer 来关闭各种流资源等
 */
func tryDefer()  {

	defer fmt.Println(0)
	fmt.Println("1")
	defer fmt.Println("3")

	panic("出现错误，但是上方的defer定义的语句会执行")

	// defer fmt.Println("即使下方出现return,此语句还是会执行")

	return

	fmt.Println("此语句不会执行")
}

/**
打印文件内容
 */
func readFileContent()  {
	file ,err := os.Open("/Users/huan/code/study/golang/src/go-study/错误处理和资源管理/defer/Defer.go")
	if err != nil{
		panic(err)
	}
	defer file.Close()
 	scanner := bufio.NewScanner(file)
 	for scanner.Scan(){
 		fmt.Println(scanner.Text())
	}
}

func main() {
	// tryDefer()
	readFileContent()
}
